package com.duobaoyu.dby.supply.common.biz.dto.refund;

import lombok.Data;
import lombok.ToString;

import javax.validation.Valid;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;

/**
 * Created by shuming on 2023/11/23 10:18
 * 修复售后数据接口
 */
@Data
@ToString
public class AfterSaleFixDTO {

    /**
     * 修复内容
     */
    @NotNull(message = "修复内容必填")
    @Valid
    private Content content;

    /**
     * 是否通知
     */
    private Boolean notify;

    @Data
    @ToString
    public static class Content {

        /**
         * 描述：渠道编码
         */
        private String channelCode;
        /**
         * 描述：订单编码
         */
        private String orderSn;

        /**
         * 业务来源
         */
        private String showServerName;
        /**
         * 描述：售后状态
         */
        private Integer status;
        /**
         * 描述：售后渠道交易单号
         */
        private String afterSaleTradeOrderSn;
        /**
         * 描述：售后单号
         */
        @NotBlank(message = "售后单号必填")
        private String afterSaleSn;
        /**
         * 描述：渠道父编号
         */
        private String channelOrderParentSn;
        /**
         * 描述：申请退款金额
         */
        private BigDecimal applyRefundAmount;
        /**
         * 描述：渠道售后单号
         */
        private String channelAfterSaleSn;
        /**
         * 描述：售后来源 0 用户申请 1 运营申请 2 系统自动生成
         */
        private Integer afterSaleSource;
        /**
         * 描述：运费申请退款金额
         */
        private BigDecimal freightApplyRefundAmount;
        /**
         * 描述：渠道运费退款金额
         */
        private BigDecimal channelFreightActualRefundAmount;
        /**
         * 描述：失败原因
         */
        private String failReason;

        /**
         * 取消原因
         */
        private String cancelReason;
        /**
         * 调用来源
         */
        private String serverName;
        /**
         * 描述：订单渠道交易单号-和订单统一
         */
        private String channelTradeOrderSn;

        /**
         * 供应链三方交易单号
         */
        private String orderTradeSn;
        /**
         * 描述：售后类型
         */
        private Integer afterSaleType;
        /**
         * 描述：申请退款金额
         */
        private BigDecimal channelActualRefundAmount;

        /**
         * 描述：是否有发票
         */
        private Boolean hasInvoice;
        /**
         * 描述：业务售后单号
         */
        private String bizAfterSaleSn;
        /**
         * 描述：渠道订单编号
         */
        private String channelOrderSn;

        /**
         * 退款状态
         */
        private Integer refundStatus;

        /**
         * 商户id
         */
        private String mchId;

        /**
         * 用户id
         */
        private String userId;

        /**
         * 联系人信息
         */
        private AfterSaleContactDTO afterSaleContact;

        /**
         * 客户寄回地址
         */
        private AfterSaleReturnAddressDTO afterSaleReturnAddress;

        /**
         * 售后明细
         */
        private List<Item> items;
    }


    @Data
    @ToString
    public static class Item {

        private Long id;
        /**
         * 描述：渠道商品编码
         */
        private String channelProductCode;

        /**
         * 描述：渠道运费退款金额
         */
        private BigDecimal channelFreightActualRefundAmount;
        /**
         * 描述：商品类型
         */
        private String productType;

        /**
         * 描述：三级分类id
         */
        private Long thirdClassifyId;
        /**
         * 描述：订单编号
         */
        private String orderSn;

        /**
         * 描述：sku图片
         */
        private String skuPic;
        /**
         * 描述：渠道实付金额
         */
        @DecimalMin(value = "0.00", message = "渠道实付金额错误")
        private BigDecimal channelActualPaidAmount;

        /**
         * 描述：商户实付金额
         */
        @DecimalMin(value = "0.00", message = "商户实付金额错误")
        private BigDecimal merchantActualPaidAmount;

        /**
         * 商品平台单价
         */
        @DecimalMin(value = "0.00", message = "商品平台单价错误")
        private BigDecimal itemPlatformUnitPrice;
        /**
         * 描述：渠道申请金额
         */
        @DecimalMin(value = "0.00", message = "渠道申请金额错误")
        private BigDecimal applyRefundAmount;

        /**
         * 描述：商品货物状态
         */
        private Integer goodsStatus;
        /**
         * 描述：售后原因
         */
        private String reasonCode;
        /**
         * 描述：商品编码
         */
        private String productCode;
        /**
         * 描述：订单数量
         */
        private Integer purchaseNum;
        /**
         * 描述：渠道sku编码
         */
        private String channelSkuCode;
        /**
         * 描述：渠道退款金额
         */
        @DecimalMin(value = "0.00", message = "渠道退款金额错误")
        private BigDecimal channelActualRefundAmount;
        /**
         * 描述：售后来源
         */
        private Integer afterSaleSource;
        /**
         * 描述：售后类型
         */
        private Integer afterSaleType;
        /**
         * 描述：售后原因描述
         */
        private String reasonName;
        /**
         * 描述：运费申请退款金额
         */
        @DecimalMin(value = "0.00", message = "运费申请退款金额错误")
        private BigDecimal freightApplyRefundAmount;

        /**
         * 描述：申请数量
         */
        private Integer applyNum;
        /**
         * 描述：售后描述
         */
        private String afterSaleRemark;

        /**
         * 售后图片
         */
        private String afterSaleImage;
        /**
         * 描述：sku编码
         */
        private String skuCode;
        /**
         * 描述：sku名称
         */
        private String skuName;

        /**
         * 业务来源
         */
        private String serverName;
        /**
         * 描述：三级分类名称
         */
        private String thirdClassifyName;
    }
}
